<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // test  exec 

        // 正则.方法名(字符串) 



        // 下面的三个方法  
        // 语法:
        //      字符串.方法名(正则)




        // replace  
        // 作用:替换指定的字符串  
        // 字符串语法:
        //      字符串.replace('换下的字符串','换上的字符串');
        //     替换节点: 父节点.replaceChild(换上,换下);
        // 正则语法:
        //      字符串.replace(正则表达式,'换上的字符串');

        // search 
        // 查找指定的字符串
        //      字符串方法:
        //          字符串.search('字符串片段');
        //          字符串.includes('字符串片段');
        //      正则方法:
                    // 字符串.search('正则表达式');
                    // 如果有这个字符串片段 返回第一次出现的索引  
                    // 如果没有 返回 -1  
            


        // match 

        // 捕获的升级版
        // 语法:
        //     字符串.match(字符串片段或者正则);
        // 返回值:
                // 如果传递的参数传递是字符串或者没有g的正则 
                // 结果跟exec方法返回值一模一样 

                // 如果传递的参数是 正则 而且有g  那么返回值是个数组 
                // 数组中是所有满足正则的字符串片段 





        // replace 

        // 字符串的语法

        // var str1 = '123qwer456tyuiopa789sd123fg111hjk222lzx333cvb555nm';
        // var res = str1.replace('123','***'); // 只能替换一个 
        // console.log(res);
        // 解决方案 
        // var res = str1.split('123').join('***');
        // console.log(res);

        // console.log(str1.includes('123'));
        // while(str1.includes('123')){
        //     str1 = str1.replace('123','***');
        // }
        // console.log(str1);


        // var res = str1.replace(/\d{3}/,'***')
        // console.log(res); // 只替换第一个 

        // 替换所有满足条件的?  加上标识符  g
        // var res = str1.replace(/\d{3}/g,'***')
        // console.log(res);



        // var strs = 'qSSwertBByuiopaXXsdfghOOjklzxcFFvbJKnm';
        // var arrs = ['SS','BB','XX','OO','FF','JK'];
        // for(var v of arrs){
        //     strs = strs.split(v).join('***')
        // }

        // console.log(strs);

        // 上面可以实现 使用的是非正则  


        // 使用正则实现 
        // var res = strs.replace(/SS|BB|XX|O0|FF|JK/g,'***');
        // console.log(res);

        // 上面能实现  但是 是我们把关键词 写死



        // 应该是从数组中拿到关键词 然后拼接成  
        //  这种效果 SS|BB|XX|O0|FF|JK

        // 拼接过程 

        // var strs = 'qSSwertBByuiopaXXsdfghOOjklzxcFFvbJKnm';
        // var arrs = ['SS','BB','XX','OO','FF','JK'];

        // alert(arrs.join('|'))  // SS|BB|XX|O0|FF|JK

        // /arrs.join('|')/ 这种方式 把arrs当成一个单词 join当成一个单词
        // 也就是说 不能当做数组的方法去进行拼接   
         

        // 内置构造函数 创建正则 
        // console.log(new RegExp('('+arrs.join('|')+')','g')); //arrs.join('|')
        // console.log(/arrs.join('|')/);// /arrs.join('|')/



        // 使用正则批量替换关键词 完整版  
        // var strs = 'qSSwertBByuiopaXXsdfghOOjklzxcFFvbJKnm';
        // var arrs = ['SS','BB','XX','OO','FF','JK'];

        // var reg = new RegExp('('+arrs.join('|')+')','g');

        // var res = strs.replace(reg,'***');
        // console.log(res);





        // search


        // var strs = '我是九你是三,我除了你还是你除了';
        // console.log(strs.search('除了')); // 8 返回除了第一次出现的位置
        // console.log(strs.includes('除了'));// true 返回布尔类型
        // console.log(strs.lastIndexOf('除了'));
        // console.log(strs.indexOf('除了'));
        // lastIndexOf indexOf 支持第二个参数 


        // var strs = 'hello world';
        // var res = strs.search(/lz/);
        // console.log(res); // 不存在lz 这个片段  返回  -1 

        // var res2 = strs.search(/l{2}/);
        // console.log(res2); // 2  ll 第一次出现的索引 



        // var strs = '123qwe456rtyuio789pasd111fghj222klzx333cvbn555m';
        // var arr = [];
        // var reg = /\d{3}/g
        // var res = reg.exec(strs);

        // while(res !== null){
        //     arr.push(res[0]);
        //     res = reg.exec(strs);
        // }

        // console.log(arr);


        var strs = '123qwe456rtyuio789pasd111fghj222klzx333cvbn555m';
        var res = strs.match('123');
        // console.log(res); //var strs = '123qwe456rtyuio789pasd111fghj222klzx333cvbn555m';
        // // 跟exec一样
        // console.log(res);
        // console.log(res);
        // // 不管捕获多少次  始终都是从 下表0开始捕获 最后得到的 始终是第一个满足要求的

        // console.log(strs.match(/\d{3}/));
        // console.log(strs.match(/\d{3}/));
        // console.log(strs.match(/\d{3}/));

        // ['123', index: 0, input: '123qwe456rtyuio789pasd111fghj222klzx333cvbn555m', groups: undefined]
        // 跟exec 一样 


        // console.log(strs.match(/\d{3}/g));

    </script>
</body>
</html>